package tools

import (
	"database/sql"

	"github.com/astaxie/beego"
	// "github.com/astaxie/beego/orm"

	//切记：导入驱动包
	_ "github.com/go-sql-driver/mysql"
)

// 全局变量，方便调用
var db *sql.DB

// InitMysql 初始化mysql
func InitMysql() {
	LogInfo("InitMysql, waitting....")

	driverName := beego.AppConfig.String("driverName")

	// 注册数据库驱动
	// @params orm.DRMySQL {DriverType = iota}
	// orm.RegisterDriver(driverName, orm.DRMySQL)

	// 数据库连接
	user := beego.AppConfig.String("mysqluser")
	pwd := beego.AppConfig.String("mysqlpass")
	host := beego.AppConfig.String("mysqlurls")
	port := beego.AppConfig.String("port")
	dbname := beego.AppConfig.String("mysqldb")

	// dbConn := "username:password@tcp(127.0.0.1:3306)/dbname?charset=utf8"
	// &parseTime=true&loc=Local
	dbConn := user + ":" + pwd + "@tcp(" + host + ":" + port + ")/" + dbname + "?charset=utf8&parseTime=true"

	// @params default 默认
	// err := orm.RegisterDataBase("default", driverName, dbConn)
	db1, err := sql.Open(driverName, dbConn)

	if err != nil {
		LogError("连接数据库出错")
		return
	}
	db = db1
	LogInfo("连接数据库成功")
	CreateTableWithUser()
}

// ModifyDB 操作数据库
// insert user (?,?,?) values (1,2,3)
func ModifyDB(sql string, args ...interface{}) (int64, error) {
	// 执行sql语句
	result, err := db.Exec(sql, args...)
	if err != nil {
		LogError(err)
		return 0, err
	}
	// 通过RowsAffected真正去影响到数据的行-落实sql的改变
	count, err := result.RowsAffected()
	if err != nil {
		LogError(err)
		return 0, err
	}
	return count, nil
}

// CreateTableWithUser 创建用户表
func CreateTableWithUser() {
	sql := `CREATE TABLE IF NOT EXISTS users(
		id INT(4) PRIMARY KEY AUTO_INCREMENT NOT NULL,
		username VARCHAR(64),
		password VARCHAR(255),
		status INT(4),
		createtime INT(10)
		);`
	ModifyDB(sql)
}

// QueryRowDB 查询
func QueryRowDB(sql string) *sql.Row {
	return db.QueryRow(sql)
}
